Raspberry Pi 4B 録画サーバーセットアップ
カードがぶっ壊れたりして作り直すのでメモ
参考
最近はチューナーのUSBが不安定で死にがちなのでチューナー(Mirakurun)と録画(EPGStation)のマシンを分けている(作り直しの手間を小さくするため)&raspbianじゃなくてUbuntuにしている。
大体手順は同じだと思うけど動かない部分あるかも
----
1. Raspbian with DesktopをmicroSDに焼く(ディスプレイつないでGUIでなんかいじるかもしれないという気持ち)
最近は arm64 server にしてる
慣れてるのでUbuntuに統一しようとしたらaptサーバー遅くて、比較的ぶっ壊れて作り直すことが多いのでRaspbianがいい
2. IP降ってくる環境でmicroSD挿してブートする
1. 地域設定とかする
2. raspi-config の Advanced Option 的なところで SSH Server をenable
3. sudo adduser oquno でいつもの oquno アカウントでログインできるようにする(別に pi のままでもいいけど)
sudo gpasswd -a oquno sudo と sudo gpasswd -a oquno video も
4. IPアドレス控えておく(このあとは SSH 経由でやりたいので)&sudo reboot
以降 作業マシンからoqunoアカウントでSSH 接続して作業
1. sudo raspi-config
Boot Options
auto login を true
ディスプレイ出力するときを想定
wait for network at bootを true
NASをマウントしたいので
2. 作業用ssh public key を置いておく
3. アップデートとかインストール
code:update.sh
$ sudo apt update
$ sudo apt upgrade
$ sudo apt install pcscd libpcsclite-dev libccid pcsc-tools nodejs npm automake cmake unzip byobu vim apache2 mariadb-server samba-client cifs-utils ffmpeg
$ sudo npm install -g npm@latest
# このへんで npm install n とかして置かないとそろそろうまく動かない?
$ sudo npm install n -g
$ sudo n stable
$ sudo npm install pm2 pm2-logrotate
4. NAS を自動マウントする
※これやめてHDDマウント+Samba動かすようにした
fstabでやるとうまく行かない場合起動に失敗して救いにくいので rc.local でやる(問題ないのかよく分かっていない)
起動に失敗するのはオプションの問題なので後でちゃんとやりたい
nasneと同時に電源上がったとき(元のコンセント抜けたりブレーカー落ちたの戻したり)の場合は起動時にnasneマウントできない可能性が高いので手動でマウントする必要ある
code:nasne.sh
# マウント先のパスつくる
$ sudo mkdir /nasne
$ sudo chown oquno:oquno /nasne
# マウントできるか確認(uid, gid はマウントしたあとのオーナー設定)
$ sudo mount -t cifs //NASNEのIP/share1/VIDEO /nasne -o uid=oquno,gid=1001,sec=none,vers=1.0 # できるなら rc.local の exit する手前のあたりにでも追記
$ sudo vim /etc/rc.local
mount -t cifs //NASNEのIP/share1/VIDEO /nasne -o uid=oquno,gid=1001,sec=none,vers=1.0 # アンマウントしておく
$ sudo umount /nasne
# 再起動して自動でマウントされるの確認
$ sudo reboot
USBHDDのマウントメモ
/etc/fstab に blkid とかで調べたUUID含めて記述
UUID=XXXXXXXXX /mnt/hdd ntfs-3g defaults,nofail 0 0
ntfsなのはあとでWindowsで扱うかもしれないという気持ちからなのでLinuxでやっていく気持ちあるならext4あたりでフォーマットしたほうがいい?
なんとなくCPU温度とか確認したいので入れる
code:mackerel.sh
$ sudo dpkg -i mackerel-agent_0.65.0-1.systemd_armhf.deb
$ sudo mackerel-agent init -apikey="XXXXXXX" # mackerel.io で API KEY 確認
$ sudo systemctl enable mackerel-agent
$ sudo systemctl start mackerel-agent
ICカードリーダー
Raspberry Pi のUSBにカードリーダーつないだ上でB-CAS挿して
$ sudo pcsc_scan で
Japanese Chijou Digital B-CAS Card (pay TV)
とか見えればOK
USBポートにチューナー挿す
ドライバー入れなくても動いてるような気がしてたけどレンダリングできてなかった
code:px-q1ud.sh
# 適当に ~/temp とかで
$ unzip PX-S1UD_driver_Ver.1.0.1.zip
$ sudo cp PX-S1UD_driver_Ver.1.0.1/x64/amd64/isdbt_rio.inp /lib/firmware/
$ reboot # 再起動して見えるか確認
# 再ログイン後
$ lsusb | grep VidzMedia
Bus 001 Device 008: ID 3275:0080 VidzMedia Pte Ltd PX-S1UD Digital TV Tuner
Bus 001 Device 007: ID 3275:0080 VidzMedia Pte Ltd PX-S1UD Digital TV Tuner
Bus 001 Device 006: ID 3275:0080 VidzMedia Pte Ltd PX-S1UD Digital TV Tuner
Bus 001 Device 005: ID 3275:0080 VidzMedia Pte Ltd PX-S1UD Digital TV Tuner
# こんな感じに PX-Q1UD なら 4個見える
libarib25 , recdvb
code:recdvb.sh
$ cd libarib25
$ cmake .
$ make -j 4
$ sudo make install
$ cd ..
# 手元にはあるけどこれもう取得できなくなってる…
$ tar zxvf recdvb-1.3.3.tgz
$ cd recdvb-1.3.3
$ ./autogen.sh
$ ./configure --enable-b25
$ make -j 4
$ sudo make install
code:mirakurun.sh
$ sudo npm install pm2 pm2-logrotate -g
$ sudo npm install mirakurun -g --unsafe-perm --production
$ sudo mirakurun config tuners
# vim が立ち上がるので以下を追記して保存(インデントは既存のものに揃える)
- name: PX-Q1UD-1
types:
- GR
command: recdvb --b25 --dev 0 <channel> - -
isDisabled: false
- name: PX-Q1UD-2
types:
- GR
command: recdvb --b25 --dev 1 <channel> - -
isDisabled: false
- name: PX-Q1UD-3
types:
- GR
command: recdvb --b25 --dev 2 <channel> - -
isDisabled: false
- name: PX-Q1UD-4
types:
- GR
command: recdvb --b25 --dev 3 <channel> - -
isDisabled: false
$ sudo mirakurun restart
# これでチャンネルとか拾ってる感じだったらOK
チャンネルのスキャンとか終わったら TVTest+BonDriver_Mirakurun.dll とか使うとWindowsとかで視聴できる
enc.js の libx264 だけ h264_v4l2m2m に変える
手元だとこれだけだとぶっ壊れるのでサイズ指定とかのパラメータもいる(もとからあったっけ?)
設定の diff
code:configdiff.sh
$ diff config/config.sample.json config/config.json
5,7c5,21
< "dbType": "sqlite3",
< "ffmpeg": "/usr/local/bin/ffmpeg",
< "ffprobe": "/usr/local/bin/ffprobe",
---
"dbType": "mysql",
"mysql": {
"host": "localhost",
"port": 3306,
"user": "epgstation",
"password": "kogaidan",
"database": "epgstation",
"connectTimeout": 20000,
"connectionLimit": 10
},
"recorded": "/nasne",
"basicAuth": {
"user": "supersecureuser",
"password": "supersecurepassword"
},
"ffmpeg": "/usr/bin/ffmpeg",
"ffprobe": "/usr/bin/ffprobe",
DBの設定
code:dbsetup.sh
$ sudo mysql_secure_installation
# current password 入れる
# Change the root password? Y/n => n # Remove anonymous users? Y/n => y # Disallow root login remotely? Y/n => y # Remove test database and access to it? Y/n => y # Reload privilege tables now? Y/n => y $ sudo mysql -u root
MariaDB (none)> CREATE DATABASE epgstation CHARACTER SET utf8mb4; Query OK, 1 row affected (0.000 sec)
MariaDB (none)> GRANT ALL ON epgstation.* TO epgstation@localhost IDENTIFIED BY 'kogaidan'; Query OK, 0 rows affected (0.001 sec)
$ sudo vim /etc/mysql/mariadb.conf.d/50-server.cnf
# expire_logs_days が デフォルト 10 なのを 1 に変更して保存
$ sudo systemctl restart mariadb.service
設定終わったらマニュアルの通り npm start 的なことして開始
自動開始まだうまくできてない
http://raspiのip:8888/ を開くと EPGStation が見れる
Apache2(リバースプロキシ)
EPGStationのポート8888にポート80を転送する
code:reverse.sh
$ sudo a2enmod proxy proxy_http
$ sudo vi /etc/apache2/sites-enabled/000-default.conf
# DocumentRoot の下辺りに適当に
# を追記して保存
$ sudo systemctl reload apache2.service
http://raspiのip/ を開くと EPGStation が見れる